from machine import ADC,Pin
import time
from umqtt.simple import MQTTClient
import dht

import network
# 等待网络连接
def wait_for_wifi_connection():
    wlan = network.WLAN(network.STA_IF) # 创建接口
    wlan.active(True)       # 激活接口
    wlan.scan()             # 扫描当前热点
    wlan.connect('1439', '234567890') # 连接到指定wifi，其中ssid为wifi名，key为wifi密码
    # wlan.config('mac')      # 获取连接后的mac地址 
    network_config = wlan.ifconfig()         # 获取连接后的IP/netmask/gw/DNS等地址信息
    #print(network_config)

    # 定义 灯泡引脚
    d15 = Pin(15,Pin.OUT)
    d15.value(0) # 默认不亮灯

    while not wlan.isconnected():
        continue
    print("网络已连接！")

wait_for_wifi_connection()


# mqtt配置信息
topic_light = "base/light"

def connect2Broker():
    global topic_temp,topic_hum
    # 第一个参数为client_id，要求不能重复，后面的为MQTT服务器IP地址
    client = MQTTClient("123456","192.168.10.29")
    client.connect()
    return client

client = connect2Broker()


# 读取gpio35端口的模拟量,注意只支持ADC1，不支持ADC2
light_adc = ADC(Pin(35))

# 读取gpio32端口的数字量
light_dig = Pin(32,Pin.IN)

while True:
    ana_val = light_adc.read_u16() # 模拟量范围0-65536，表示当前环境光的亮度越大，否则越小
    dig_val = light_dig.value() # 数字量 ，数字0表示有光，1表示没有光
    print(ana_val,dig_val)
    try:
        client.publish(topic_light,str(ana_val)) # 发布光照信息
    except Exception as e:
        print(e)
        # 发射异常重连机制
        wait_for_wifi_connection()
        client = connect2Broker()
        continue
    time.sleep(0.2)

